Vertex _////_hhhh_wwww_////..._////_pppp_cccc_iiii_////slot_////_dddd_mmmm_aaaa supports the following ioctl commands:
_PPPP_CCCC_IIII_IIII_OOOO_CCCC_DDDD_MMMM_AAAA_AAAA_LLLL_LLLL_OOOO_CCCC - Allocate a buffer for User DMA.
The parameter should be a pointer to a 64-bit variable containing
either simply the size of the transfer, or the result of packing
some PCIIO DMA flags with the size using the
_PPPP_CCCC_IIII_IIII_OOOO_CCCC_DDDD_MMMM_AAAA_AAAA_LLLL_LLLL_OOOO_CCCC______RRRR_EEEE_QQQQ_UUUU_EEEE_SSSS_TTTT______PPPP_AAAA_CCCC_KKKK(flags, size) macro (which just places
the flags in the upper 32 bits of the value). All blocks allocated
with _PPPP_CCCC_IIII_IIII_OOOO_CCCC_DDDD_MMMM_AAAA_AAAA_LLLL_LLLL_OOOO_CCCC should be explicitly released with _PPPP_CCCC_IIII_IIII_OOOO_CCCC_DDDD_MMMM_AAAA_FFFF_RRRR_EEEE_EEEE
before the device is closed, after making sure that there is no
longer any outstanding DMA to the target.
_PPPP_CCCC_IIII_IIII_OOOO_CCCC_DDDD_MMMM_AAAA_FFFF_RRRR_EEEE_EEEE - Destroy a User DMA buffer.
The parameter is a pointer to a 64-bit variable containing the PCI
address of a DMA buffer previously allocated by a _PPPP_CCCC_IIII_IIII_OOOO_CCCC_DDDD_MMMM_AAAA_AAAA_LLLL_LLLL_OOOO_CCCC
request.
Vertex _////_hhhh_wwww_////..._////_pppp_cccc_iiii_////slot_////_iiii_nnnn_tttt_rrrr supports the following ioctl commands:
_PPPP_CCCC_IIII_IIII_OOOO_CCCC_SSSS_EEEE_TTTT_UUUU_LLLL_IIII(n) - set up a ULI
The value n in the command is a bitmap of which interrupts are to be
routed from the board, formed as the inclusive-or of one or more
PCIIO_INTR_LINE macros. The parameter is a pointer to a _ssss_tttt_rrrr_uuuu_cccc_tttt
_uuuu_llll_iiii_aaaa_rrrr_gggg_ssss appropriately filled in.
In a configuration where each byte's address is precisely maintained,
every data item is at its correct address; and, unless the device is one
of the rare big-endian PCI devices, the bytes of any multibyte quantity
are in reversed significance and must be reversed before storing or after
reading. SGI's PCI support codde gives this byte lane configuration the
name BYTE_STREAM.
When this driver is asked for mappings to devices, it provides mappings
using WORD_VALUES, since it is more efficient to adjust the byte
addresses of items than to swap bytes when accessing two and four byte
quantities.
There are currently no interfaces to pciba to request BYTE_STREAM
mappings.
NNNNOOOOTTTTEEEESSSS
If the system does not support ULI, the _////_hhhh_wwww_////..._////_pppp_cccc_iiii_////slot_////_iiii_nnnn_tttt_rrrr vertex will
not be present.
If a boot prom allocates PCI space and sets up a device's BASE registers,
and the values are not page aligned, pciba is unable to provide direct
mmap service for those windows, and the corresponding
_////_hhhh_wwww_////..._////_pppp_cccc_iiii_////slot_////_bbbb_aaaa_ssss_eeee_////bar, _////_hhhh_wwww_////..._////_pppp_cccc_iiii_////slot_////_mmmm_eeee_mmmm and _////_hhhh_wwww_////..._////_pppp_cccc_iiii_////slot_////_iiii_oooo
verticies will not exist.
Such missing windows can still be accessed, as can any area decoded by a
BASE register, by the longer method of using a _PPPP_CCCC_IIII_IIII_OOOO_CCCC_GGGG_EEEE_TTTT_BBBB_AAAA_SSSS_EEEE(n) ioctl
command on the _////_hhhh_wwww_////..._////_pppp_cccc_iiii_////slot_////_cccc_oooo_nnnn_ffff_iiii_gggg vertex to get the content of the
BASE(n) register. If this value is odd, mask off the last two bits and
use the resulting value as the offset for mmap of the _////_hhhh_wwww_////..._////_pppp_cccc_iiii_////_iiii_oooo
vertex. If the value was even, mask off the last four bits and use the
resulting value as the offset for mmap of the _////_hhhh_wwww_////..._////_pppp_cccc_iiii_////_mmmm_eeee_mmmm vertex.